Aprendemos a usar o R como uma calculadora!
# Qual é o resultado?
2 + 9 * 4
4 + 3 / 10^2
pi - 3
# Notação científica
5 * 10^2
5 * 10^-2
111111 * 111111
1111111 * 1111111Aprendemos a criar e manipular objetos!
# Qual é o valor de a?
a <- 4
a <- a * 5
a <- a + 10Podemos criar vários objetos de uma vez:
x <- y <- z <- w <- piAgora nós criamos um monte de objetos na memória do R. Vamos apagá-los para nosso ambiente não ficar bagunçado
rm(list = ls())Aprendemos a criar e manipular vetores!
numeros <- c(1, 4, 10, pi, 1/3)
texto <- c("a", "b", "iBureau")
(tudo_junto <- c(numeros, texto)) # tudo entre parênteses para mostrar conteúdo do objeto## [1] "1" "4" "10"
## [4] "3.14159265358979" "0.333333333333333" "a"
## [7] "b" "iBureau"
Note que, quando juntamos números e texto, todos os elementos viram texto. Vamos tratar das particularidades de texto mais para a frente.
Quando fazemos operações com vetores de tamanhos diferentes, o R vai retomar o vetor mais curto até completar todas as operações
a <- c(10, 20, 30)
b <- c(1, 2, 3, 4, 5, 6, 7, 8, 9)
a + b## [1] 11 22 33 14 25 36 17 28 39
Hoje vamos usar esses blocos fundamentais para explorar algumas das funções mais centrais do R.
Funções são o arroz-com-feijão da programação estatística no R. Muitas das análises que vamos fazer no curso giram em torno de utilizar as funções corretas e identificar os argumentos apropriados para cada caso.
Nós já vimos alguns exemplos de funções na primeira aula:
install.packages() # instala pacotes
library() # carrega pacotes na memória
sessionInfo() # Informações sobre a versão do R
O principal uso das funções é automatizar operações que, se fossem feitas manualmente, demorariam muito tempo, estariam sujeitas a erros ou simplesmente seriam muito tediosas.
Por exemplo, se precisarmos achar a média entre dois números, poderíamos fazer o cálculo manualmente
(35 + 65)/2## [1] 50
Mas se tivéssemos 1000 números em vez de 2, esse processo seria extremamente longo e cansativo. Assim, podemos simplesmente usar a função mean() para calcular a média de todos os números de 1 a 1000
mean(1:1000)## [1] 500.5
O R possui inúmeras funções para fazer todo tipo de cálculo que vocês possam imaginar (e também o que vocês nem conseguem imaginar). Ainda assim, à medida que vocês avançam no uso, haverá a necessidade de fazer tarefas específicas, para as quais nenhuma função existente é satisfatória. Nesses momentos fica evidente a vantagem de o R ser uma linguagem de programação, pois podemos criar nossas próprias funções.
Por enquanto, vamos explorar algumas funções que já existem no R. Vocês perceberam que não precisei digitar todos os números de 1 a 1000 no slide anterior?
numeros <- 1:1000
numeros_desc <- 1000:1 Muito mais fácil do que numeros <- c(1, 2, 3, ..., 1000)
Mas e se eu quisesse tirar a média dos números ímpares de 1 a 1000? Teria que digitar os números um a um?
Nesses momentos é bom lembrar que a preguiça é um dos traços que separam os bons programadores dos demais. Quase todas as tarefas tediosas e repetitivas na programação podem ser automatizadas de alguma maneira.
Obviamente, o R tem a função seq() que nos permite criar um vetor de números ímpares. Note como são utilizados os argumentos da função.
impares <- seq(from = 1, to = 1000, by = 2)
mean(impares)## [1] 500
O R vem pré-instalado com diversas funções estatísticas – afinal, essa é uma de suas razões de existir. Além da função mean(), que vimos no slide anterior, podemos olhar também para outras estatísticas descritivas
sd(impares) # desvio-padrão
var(impares) # variância
range(impares) # amplitude
IQR(impares) # intervalo interquartilO comando summary() nos dá uma visão geral sobre esse vetor
summary(impares)## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 1.0 250.5 500.0 500.0 749.5 999.0
Linguagens de programação aramazenam variáveis sob diferentes classes
Hoje vamos fazer apenas uma discussão geral para que vocês saibam que elas existem, e comentaremos os detalhes ao longo das aulas
double, integercharacterfactorlogicalNA, NULL, Inf, NaNPara descobrir o tipo de um objeto, você pode usar a função typeof()
typeof(impares)Podemos pensar nos dataframes como coleções de vetores. É, de longe, o formato mais utilizado para a manipulação de bases de dados. o R tem suporte para outras estruturas de dados como matrizes e listas, que veremos conforme a necessidade.
nomes <- c("Rafael", "Isllane", "Ana", "Pedro")
formacao <- c("Ciência Política", "GPP", "Adm Publica", "GPP")
tempo_empresa <- c(3, 10, 10, 1)
equipe_acp <- data.frame(nomes, formacao, tempo_empresa)
View(equipe_acp) # visualização
nrow(equipe_acp) # número de linhas
ncol(equipe_acp) # número de colunas
head(equipe_acp) # primeiras obs
summary(equipe_acp) # resumo dos dadosAs ferramentas que vamos ver agora servem para “pinçar” informações que estã na memória do R. Voltando ao vetor de números ímpares que criamos mais cedo, suponha que eu queira saber o valor do 287º elemento
impares[287]Podemos expandir o operador [ para diversas seleções, de acordo com a necessidade
impares[c(1, 76, 48)] # seleção de diversos números
impares[-c(1:250)] # todos os números menos os 250 primeiros
impares[impares > 900] # apenas valores maiores que 900Note que sempre podemos guardar os resultados dessas operações em um novo objeto
O funcionamento do operador [ é semelhante para dataframes, mas precisamos atentar para as dimensões de linhas e colunas
equipe_acp[1, 3] # linha 1, coluna 3
equipe_acp[1,] # retorna toda a linha 1
equipe_acp[,3] # retorna toda a coluna 3
equipe_acp[,c(1, 3)] # retorna as colunas 1 e 3A diferença é que, com dataframes, é muito comum utilizarmos o operador $ para selecionar colunas
equipe_acp$tempo_empresa # seleciona a variável "tempo de empresa"
equipe_acp[,3] # mesmo resultadoPara seleções mais complexas, é comum que se precise recorrer a operadores lógicos.
Os mais comuns são & e |, mas todos os operadores relacionais também são reconhecidos: == (igual a), != (diferente de), > (maior que), < (menor que), >= (maior ou igual que), <= (menor ou igual que)
equipe_acp[equipe_acp$tempo_empresa == 10,] # apenas as pessoas com 10 meses de empresa
equipe_acp[equipe_acp$tempo_empresa < 5,] # apenas as pessoas com menos de 5 meses de empresa
equipe_acp[equipe_acp$tempo_empresa < 5 | equipe_acp$formacao == "Adm Publica",] # menos de 5 meses de empresa OU fazem adm pública
equipe_acp[equipe_acp$tempo_empresa > 2 & equipe_acp$tempo_empresa < 5,] # entre 2 e 5 meses de empresaA função rep() é frequentemente útil. Ela permite criar vetores com valores repetidos. Vamos aproveitar para consultar a documentação desta função.
?rep()## starting httpd help server ... done
Notem a diferença entre a declaração posicional e nominal dos argumentos.
Além da documentação oficial do R, que às vezes pode ser precária ou difícil de entender, duas referências importantes são o Google e o Stack Overflow
Se necessário, consulte a documentação das funções seq() e rep() para responder as perguntas 1 a 3:
Use a função seq() para criar a seguinte sequência: 2, 5, 8, 11
Use a função rep() para gerar a seguinte sequência: 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4
Use a função rep() para gerar a seguinte sequência: 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4
Para os exercícios 4 a 9, você vai precisar carregar uma base de dados didática que já vem instalada no R. Para fazer isso, rode o comando bd <- mtcars, e você verá um dataframe chamado bd no seu ambiente. Examine a documentação da base de dados com o comando help(mtcars), e use o comando View(bd) para inspecionar visualmente a base de dados.
mpg) esteja entre 15 e 20.cyl igual a 6.gear ou carb sejam iguais a 0.bd.TRUE * FALSE e explique o resultado.am.x <- c(2, 4, 6, 8)
y <- c(TRUE, TRUE, FALSE, TRUE)
sum(x[y])No quadro abaixo, criei um vetor com o número de cadeiras que cada partido possui na Câmara dos Deputados. Utilize essa informação e seus conhecimentos de programação para calcular o Número Efetivo de Partidos nessa casa.
cadeiras <- c(55, 54, 38, 35, 34, 33, 32, 31, 30, 28, 27, 13, 11, 10, 10, 10, 8, 8, 8, 8, 7, 6, 5, 4, 3, 2, 1, 1, 1)